#include "Pesquisa.h"
#include "Vacina.h"
#include "Cliente.h"
#include "Paciente.h"
#include "Doenca.h"
#include "ItemAgenda.h"


    /**********************************************************************
        Classe: Pesquisa
        Funcionalidade: Em geral, tem funções que recebem uma lista com
    objetos de alguma classe, e retorna um ponteiro para certo objeto da
    lista, que poderá ser usado ou modificado.
    ***********************************************************************/
    
/*Metodo que retorna um objeto do tipo ItemAgenda com um evento especifico
  salvo na agenda*/
ItemAgenda * Pesquisa::buscarEventoAgenda(string d,
		list<ItemAgenda> &itensAgenda) {
	list<ItemAgenda>::iterator it;
	for (it = itensAgenda.begin(); it != itensAgenda.end(); it++) {
		if (d == it->getDescricao()) {
			return &(*it);
		}
	}
	return NULL;
}

/*Metodo que retorna um objeto do tipo Vacina com as informacaoes de uma vacina
  especifica previamente cadastrada*/
Vacina * Pesquisa::buscarVacina(string d, list<Vacina> &vacinas) {
	list<Vacina>::iterator it;
	for (it = vacinas.begin(); it != vacinas.end(); it++) {
		if (d == it->getDescricao()) {
			return &(*it);
		}
	}
	return NULL;
}

/*Metodo que realiza a pesquisa de uma vacina e apaga as informcoes desta vacina
  a excluindo do registro*/
bool Pesquisa::buscarApagarVacina(string d, list<Vacina> &vacinas) {
	list<Vacina>::iterator it;
	for (it = vacinas.begin(); it != vacinas.end(); it++) {
		if (d == it->getDescricao()) {
			//Vacina * temp =  &(*it);
			vacinas.erase(it);
			return true;
		}
	}
	return false;
}

/*Metodo que retorna um objeto do tipo Cliente ccom as informacoes 
  previamente cadastradas de um cliente especifico*/
Cliente * Pesquisa::buscarCliente(string d, list<Cliente> &clientes) {
	list<Cliente>::iterator it;
	for (it = clientes.begin(); it != clientes.end(); it++) {
		if (d == it->getNome()) {
			return &*it;
		}
	}
	return NULL;
}

/*Metodo que realiza a pesquisa de um cliente e apaga as informcoes deste cliente
  o excluindo do registro*/
bool Pesquisa::buscarApagarCliente(string d, list<Cliente> &clientes) {
	list<Cliente>::iterator it;
	for (it = clientes.begin(); it != clientes.end(); it++) {
		if (d == it->getNome()) {
            clientes.erase(it);
			return true;
		}
	}
	return false;
}

/*Metodo que realiza a pesquisa de um evento e apaga as informcoes deste evento
  o excluindo do registro*/
bool Pesquisa::buscarApagarEventoAgenda(string d,
		list<ItemAgenda> &itensAgenda) {
	list<ItemAgenda>::iterator it;
	for (it = itensAgenda.begin(); it != itensAgenda.end(); it++) {
		if (d == it->getDescricao()) {
			//ItemAgenda * temp = &(*it);
			itensAgenda.erase(it);
			return true;
		}
	}
	return false;
}

/*Metodo que realiza a pesquisa de uma paciente previamente cadastrado*/
Paciente * Pesquisa::buscarPaciente(string d, list<Cliente> &clientes) {
	list<Cliente>::iterator it;
	list<Paciente>::iterator itPac;

	for (it = clientes.begin(); it != clientes.end(); it++) {
		list<Paciente> &pacientes = it->getPacientes();
		for (itPac = pacientes.begin(); itPac != pacientes.end(); itPac++) {
			if (d == itPac->getNome()) {
				return &(*itPac);
			}
		}
	}
	return NULL;
}

Paciente * Pesquisa::buscarPaciente(string d, list<Paciente> &pacientes) {
	list<Paciente>::iterator it;
	for (it = pacientes.begin(); it != pacientes.end(); it++) {
		if (d == it->getNome()) {
			return &(*it);
		}
	}
	return NULL;
}

/*Metodo que realiza a pesquisa de uma doenca previamente cadastrada*/
Doenca * Pesquisa::buscarDoenca(string d, list<Doenca> &doencas) {
	list<Doenca>::iterator it;
	for (it = doencas.begin(); it != doencas.end(); it++) {
		if (d == it->getDescricao()) {
			return &(*it);
		}
	}
	return NULL;
}

/*Metodo que realiza a pesquisa de uma doenca e apaga as informcoes desta doenca
  a excluindo do registro*/
bool Pesquisa::buscarApagarDoenca(string d, list<Doenca> &doencas) {
	list<Doenca>::iterator it;
	for (it = doencas.begin(); it != doencas.end(); it++) {
		if (d == it->getDescricao()) {
			doencas.erase(it);
			return true;
		}
	}
	return false;
}

